function
這個關鍵字來宣告// 函式結構
//函式名稱 //傳入的參數
function afunction (parameter) {
var localVariable = '區域變數';
console.log(this, localVariable); // this, 區域變數
return '附加一段' + parameter ; // 回傳參數
}
var data = afunction('參數'); // 呼叫函式並傳入參數
console.log(data); // 附加一段參數
函式陳述式
//函式陳述式
function functionA () {
console.log('函式陳述式','具名函式');
console.log(functionA); // f functionA() {...}
}
functionA();
函式表達式
//函式表達式
//先宣告一個變數,再宣告一個函式再透過等號賦予到變數上
var functionB = function () {
console.log('函式表達式','匿名函式');
console.log(functionB); // f () {...}
}
functionB();
不是所有的函式表達式都是匿名函式
var functionC = function functionD() {
console.log(functionC, functionD); // f functionD() {...}
// 具名函式能夠在函式內被調用
}
functionC();
//在外層是取不到 functionD 的
console.log(functionD); // Uncaught ReferenceError: functionD is not defined
console.log(functionC); // f functionD() {...}
範例:在函式內調用具名函式
var num = 1;
var giveMeMoney = function giveMoreMoney(coin){
num += 1;
console.log('執行 giveMeMoney', num , coin);
// 當傳入金額不夠時 就會不斷觸發 giveMoreMoney
return coin > 100 ? coin : giveMoreMoney( num * coin );
};
console.log(giveMeMoney(30));
// 執行 giveMeMoney 2 30
// 執行 giveMeMoney 3 60
// 執行 giveMeMoney 4 180
// 180
範例 2
function callSomeone(fn) {
fn();
}
callSomeone(function() { console.log('執行函式') })
// 傳入之函式不用給名稱
// 在傳入變為參數時,就如同函式表達式
// 定義一個函式並賦予到參數上